package com.xiao.sulingother.config.threadpool;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author: 1322127758@qq.com
 * @date: 2022/3/24 20:13
 * @作用: 多线程
 */
@Configuration
public class ThreadPoolConfig {
    @Bean
    public ThreadPoolExecutor threadPoolExecutor(){

        /*
         * 创建一个线程池 方式一(常用)
         * 参数一:核心线程数量,不会被释放
         * 参数二:最大线程数量,核心线程数和栈空间都满后,会添加线程,空闲时会释放除了核心线程的线程
         * 参数三:非核心线程空闲多久释放
         * 参数四:指定参数三的时间单位
         * 参数五:栈空间大小,表示可以压10万个任务
         * 参数六:线程创建的工厂
         * 参数七:栈和线程都满运行后新来的任务要怎么办,一丢弃在栈中最老的任务,二丢弃这个任务(默认)
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                20,
                200,
                10,
                TimeUnit.SECONDS,
                new LinkedBlockingDeque<>(100000),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
        return threadPoolExecutor;
    }
}
